package com.itheima.d2_lambda;

import com.itheima.d1_arrays.bean.Student;
import java.util.Arrays;
import java.util.Comparator;
import java.util.function.IntToDoubleFunction;

/**
 * Lambda格式：
 *      (参数列表) -> {方法体}
 *
 *      参数列表省略规则：
 *          1、如果有参，那么参数的类型可以省略   (int a, int b) -> {} ===> (a, b) -> {}
 *          2、如果只有一个参数，参数类型和括号都可以省略   (int a)->{} ===> a->{}
 *          3、如果无参，括号不能省略
 *      方法体省略规则：
 *          1、如果方法体中只有一个语句，此时，大括号和分号如果有return语句，都可以一并省略（不能单独只省略一部分）
 *          (int a, int b) -> {
 *              return a + b;
 *          }
 *          ===>简化后：   (a,b) -> a + b
 */
public class LambdaTest2 {
    public static void main(String[] args) {
        // 目标：使用Lambda简化函数式接口。
        double[] prices = {99.8, 128, 100};

//        Arrays.setAll(prices, new IntToDoubleFunction() {
//            @Override
//            public double applyAsDouble(int value) {
//                // value是索引 0  1  2
//                return prices[value] * 0.8;
//            }
//        });

        //Lambda表达式
        Arrays.setAll(prices,(int value) -> {
                // value是索引 0  1  2
                return prices[value] * 0.8;
        });

        //Lambda表达式的省略写法
        Arrays.setAll(prices,value -> prices[value] * 0.8);

        //匿名内部类简化为Lambda
        //简化参数
        //简化方法体

        System.out.println("----------------------------------------------------------");

        Student[] students = new Student[4];
        students[0] = new Student("蜘蛛精", 169.5, 23);
        students[1] = new Student("紫霞", 163.8, 26);
        students[2] = new Student("紫霞", 163.8, 26);
        students[3] = new Student("至尊宝", 167.5, 24);

//        Arrays.sort(students, new Comparator<Student>() {
//            @Override
//            public int compare(Student o1, Student o2) {
//                return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
//            }
//        });

        //匿名内部类简化为Lambda
        Arrays.sort(students,(Student o1, Student o2) -> {
                return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
        });

        //简化参数
        Arrays.sort(students,(o1,o2)->{
            return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
        });

        //简化方法体
        Arrays.sort(students,(o1,o2)->
            Double.compare(o1.getHeight(), o2.getHeight()) // 升序
        );

        System.out.println("Arrays.toString(students) = " + Arrays.toString(students));

        //匿名内部类简化为Lambda
        //简化参数
        //简化方法体


    }
}
